home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 30
/
Amiga Format AFCD30 (Sep 1998, Issue 114).iso
/
-seriously_amiga-
/
graphics
/
bmp2spec
/
source
/
bmp2spec.amiga.c
next >
Wrap
C/C++ Source or Header
|
1998-06-22
|
5KB
|
424 lines
/* BMP2SPEC version 1.0 */
/* By the infamous BLOOD! */
/* (C)1996 Cheese Freak Software */
/* This prog is most definitely FREEWARE! */
/* But please don't distribute updated versions without asking first...! */
/* Amiga compilation with AmigaOS version string, Chris Young 1998 */
#include <stdio.h>
#include <stdlib.h>
#include "bmp2spec.h"
void main(int argc, char *argv[])
{
FILE *fp1, *fp2;
BYTE header[24],checkbit=255,data[6144], screen[6144];
int count,count2,ptr,ptr2,ptr3,x,y,z,result;
char *ver = "$VER:BMP2SPEC 1.0 (13.06.98)";
getheader(header);
printf("\nBMP2SPEC version 1.0\n");
printf("Written by the infamous BLOOD!\naka l.d.tonks@bra0202.wins.icl.co.uk\n");
printf("(C)1996 Cheese Freak Software\n\n");
printf("This program is FREEWARE! Don't pay more than 2p for it!\n\n");
if(argc!=3)
{
printf("**** IMPORTANT! ****\n");
printf("Set STACK 50000 before trying to run this program, or it'll crash!\n\n");
printf("Usage : BMP2SPEC <bitmap file input> <tape file output>\n");
printf("Example : BMP2SPEC jetset.bmp jetset.tap\n\n");
exit(0);
}
else
{
printf("Converting %s to %s....\n",argv[1],argv[2]);
fp1=fopen(argv[1],"rb");
if(fp1==NULL)
{
printf("Error opening %s...!\n",argv[1]);
exit(1);
};
fp2=fopen(argv[2],"wb");
if(fp2==NULL)
{
printf("Error opening %s...!\n",argv[2]);
exit(1);
};
result=fwrite(header,24,1,fp2);
if(result!=1)
{
printf("Can't write to %s...!\n",argv[2]);
exit(1);
};
result=fread(data,62,1,fp1);
if(result!=1)
{
printf("Can't read from %s...!\n",argv[1]);
exit(1);
};
printf("Reading bitmap data...\n");
result=fread(screen,6144,1,fp1);
if(result!=1)
{
printf("Read error in %s...!\n",argv[1]);
exit(1);
};
printf("Sorting bitmap data...\n");
ptr=0;
ptr2=6144;
ptr3=0;
for(count=0;count<192;count++)
{
ptr2=ptr2-32;
ptr3=ptr2;
for(count2=0;count2<32;count2++)
{
data[ptr]=screen[ptr3];
ptr++;
ptr3++;
};
};
printf("Creating Spectrum Screen...\n");
x=0;
y=0;
z=0;
for(count=0;count<2048;count++)
{
screen[count]=data[x+(y*32)];
screen[count]=screen[count]^255;
checkbit = (checkbit ^ screen[count]);
x++;
if(x>=32)
{
x=0;
y=y+8;
if(y>=64)
{
z++;
y=z;
};
};
};
x=0;
y=64;
z=64;
for(count=2048;count<4096;count++)
{
screen[count]=data[x+(y*32)];
screen[count]=screen[count]^255;
checkbit = (checkbit ^ screen[count]);
x++;
if(x>=32)
{
x=0;
y=y+8;
if(y>=128)
{
z++;
y=z;
};
};
};
x=0;
y=128;
z=128;
for(count=4096;count<6144;count++)
{
screen[count]=data[x+(y*32)];
screen[count]=screen[count]^255;
checkbit = (checkbit ^ screen[count]);
x++;
if(x>=32)
{
x=0;
y=y+8;
if(y>=192)
{
z++;
y=z;
};
};
};
printf("Writing TAP file...\n");
result=fwrite(screen,6144,1,fp2);
if(result!=1)
{
printf("Error writing to %s...!\n",argv[2]);
exit(1);
};
data[0]=56;
for(count=0;count<768;count++)
{
result=fwrite(data,1,1,fp2);
if(result!=1)
{
printf("Error writing to %s...!\n",argv[2]);
exit(1);
};
};
result=fwrite(&checkbit,1,1,fp2);
if(result!=1)
{
printf("Error writing to %s...!\n",argv[2]);
exit(1);
};
printf("\nConversion done...!\n");
fclose(fp1);
fclose(fp2);
};
}
void getheader(BYTE header[24])
{
header[0]=19;
header[1]=0;
header[2]=0;
header[3]=3;
header[4]=115;
header[5]=99;
header[6]=114;
header[7]=101;
header[8]=101;
header[9]=110;
header[10]=32;
header[11]=32;
header[12]=32;
header[13]=32;
header[14]=0;
header[15]=27;
header[16]=0;
header[17]=64;
header[18]=0;
header[19]=128;
header[20]=212;
header[21]=2;
header[22]=27;
header[23]=255;
}